package se.janlindblom.ordning.desktop;

/**
 * $Id: Ordning.java 118 2009-12-15 18:51:34Z lindblom.jan $
 *
 * Copyright (c) 2009, Jan Lindblom
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * * Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 * * Neither the name of the project nor the names of its contributors may be
 *   used to endorse or promote products derived from this software without
 *   specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 */

import java.text.DateFormat;
import java.util.Date;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import se.janlindblom.ordning.desktop.gui.Main;
import se.janlindblom.ordning.helper.Bucket;

import se.janlindblom.ordning.helper.Puls;
import se.janlindblom.ordning.typ.Kategori;
import se.janlindblom.ordning.typ.Quarter;
import se.janlindblom.ordning.typ.samling.Aktiviteter;
import se.janlindblom.ordning.typ.samling.Fives;
import se.janlindblom.ordning.typ.samling.Kategorier;

/**
 *
 * @author Jan Lindblom (lindblom.jan@gmail.com)
 * @version $Rev: 118 $
 */
public class Ordning implements Observer {
	
	private Puls puls;
	private DateFormat df;
        private Main main;
        private Bucket bucket;
        private Fives fives;
        private Quarter currentQuarter;
	
	static Kategorier categories;
	Aktiviteter activities;
	
	public Ordning() {
            df = DateFormat.getDateTimeInstance(DateFormat.LONG,
                    DateFormat.LONG);
            categories = new Kategorier();
            activities = new Aktiviteter();
            bucket = new Bucket();
            bucket.addObserver(this);
            puls = new Puls();
            puls.setBucket(bucket);
            puls.addObserver(this);
            main  = new Main();
            main.setBucket(bucket);
            puls.addObserver(main);
            bucket.addObserver(main);
            main.setName("Main Window");
            
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    main.setVisible(true);
                }
            });
            
            for (int i=1;i<10;i++) {
                categories.add(new Kategori("Category " + i));
            }
            main.setCategories(categories);
            puls.getThread().start();
        }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
            try {
                UIManager.setLookAndFeel(UIManager
                        .getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Ordning.class.getName())
                        .log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(Ordning.class.getName())
                        .log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Ordning.class.getName())
                        .log(Level.SEVERE, null, ex);
            } catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(Ordning.class.getName())
                        .log(Level.SEVERE, null, ex);
            }

            Ordning o = new Ordning();
            String homedir = System.getProperty("user.home");
        }

	@Override
	public void update(Observable o, Object arg) {
            if (o.getClass().equals(Puls.class)) {
                Long tick = (Long) arg;
                Date d = new Date(tick);
                System.err.println("Puls: "
                        + df.format(d));
            } else if (o.getClass().equals(Bucket.class)) {
                System.err.println("Bucket: "
                        + bucket.peek().getClass().getName());
            } else {
                System.err.println("update(" + o.getClass().getName()
                        + ", " + arg.toString() + ")");
            }
        }

}
